package com.itheima.api.exception.demo09;

/**
 * throw关键字
 * 作用：用在方法的方法内部，作用就是去抛出一个对象对象，这个异常对象可以是编译期异常也可以是运行期异常
 *
 * 格式：throw 异常对象
 *
 * 为什么情况下我们需要通过throw关键字去抛出一个异常呢？
 * 在功能方法内部出现某种情况，我们不想让程序继续运行了，那么此时我们就可以使用throw关键字抛出一个异常对象
 *
 *
 */
public class ExceptionDemo01 {

    // 入口
    public static void main(String[] args) {

        try {
            function();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

    }

    // 通过throw关键字去抛出一个编译期异常
    public static void function() throws CloneNotSupportedException {

        // 直接抛出一个异常
        throw new CloneNotSupportedException();   // 如果我们抛出的是一个编译期异常，那么我们就需要对这个异常进行处理

        /**
         * 如果我们是主动通过throw关键字去抛出了一个编译期异常，那么一般情况下我们都需要在方法上通过throws关键字去添加一个异常声明
         * 而并不会去通过try...catch语句进行处理。
         */

    }


    // 通过throw关键字去抛出一个运行期异常
    public static void show() {

        // 定义两个变量
        int a = 23 ;
        int b = 0 ;

        // 我们都知道除数是不能为0的？因此在进行下一步操作之前，我们需要对除数进行判断，如果除数为0了，那么我们
        // 就不想让程序继续进行执行，因此我们就可以使用throw关键字去抛出一个异常对象
        if(b == 0) {

            // 抛出一个异常对象
//            throw new ArithmeticException() ;

            // public ArithmeticException(String s)
            throw new ArithmeticException("除数为0了.......");

        }

        // 计算a/b的结果，并将结果输出到控制台
        System.out.println(a / b);

    }

}



















